//
//  NSObject+ZBModel.h
//  ZBExtensionKit
//
//  Created by apple on 2018/8/10.
//  Copyright © 2018年 apple. All rights reserved.
//

#import <Foundation/Foundation.h>

@protocol ZBModelProtocol <NSObject>
//可选择操作
@optional
/**
 *  数组中忽略的字段
 */
+(NSArray *_Nonnull)zb_configIgnoredKeys;

/**
 替换变量的功能(及当字典的key和属性名不一样时，进行映射对应起来)
 */
+(NSDictionary *_Nonnull)zb_configReplacedKeyFromPropertyName;

/**
 字典 - > 自定义模型（数组中）
 *  @return key是数组属性,value是数组中数据的自定的类Class
 */
+(NSDictionary *_Nonnull)zb_configObjectClassInArray;

/**
 字典 - > 自定义模型
 属性：自定义类型 user : ZBUserModel
 @return key是属性,value自定的类Class
 */
+(NSDictionary *_Nonnull)zb_configObjectClassForCustom;

/**
 自定义模型 -- > 字典
 */
+(NSDictionary *_Nonnull)zb_configDictForCustomClass;

@end


@interface NSObject (ZBModel) <ZBModelProtocol>

/**
  字典 -- >模型 参数可以是json  json字符串
 */
+ (id)zb_objectWithKeyValues:(id)keyValues;
/**
 字典 -- >模型 参数可以是json
 */
+ (id _Nonnull)zb_objectWithDictionary:(NSDictionary* const _Nonnull)dictionary;

/**
  字典数组 --> 模型数组
 */
+(NSArray* _Nonnull)zb_objectArrayWithKeyValuesArray:(NSArray <NSDictionary *> *)array;

/**
  模型 -- >字典.
 */
-(NSMutableDictionary* _Nonnull)zb_keyValues;


/**
 json字符 -- >json格式数据 .
 */
+(NSDictionary *)zb_jsonWithString:(NSString*)jsonString;

/**
 字典 -- >json字符 .
 */
+(NSString*)zb_keyValueToJSONString:(NSDictionary *)dict;


@end
